<?php
//	S'occupe d'analyser les données postées dans les formulaires
//	de connexion/déconnexion et fait les actions appropriées :
// 	déconnexion ou vérification des login et mot de passe ainsi que changement des variables de session

// si l'utilisateur s'est déconnecté, on recréé la variable de session statut
if( !isset($_SESSION['statut'] ) )
	$_SESSION['statut'] = "erreur";
	
function loguer_utilisateur()
{	
	// pour protéger les comptes, on bloque ceux qui ont fait plus d'un certain nombre de mauvaises identification par jour
	// ce nombre est défini par la variable $maxBadID	
	$maxBadID=30;	
	$tempsExclusion=24;	// le nombre d'heures pendant lequel un compte est inaccessible
		
		
	$resultat_formulaires = "";	// variable contenant des messages d'analyse
	if(isset($_POST['deconnexion']) )
	{	// si l'utilisateur vient de demander à se déloguer
		$_SESSION = array();
		session_destroy();
		$_SESSION['statut']="erreur";
		
	}

	// on regarde sinon si l'utilisateur a voulu se loguer
	if (isset($_POST['login']) AND isset($_POST['mot_de_passe']) )
	{
		if( strlen($_POST['login'])>0 ) 	// on verifie que le login n'est pas vide
		{									// et qu'il ne contient pas de caractère spécial
			include_once "../Securite/parser_chaines.php";
			$login= securite_chaine( $_POST['login']);
			
			if($login === $_POST['login'])	
			{
				include_once "../Codes/fonctionsSGBD.php";
				$bdd=ouvrirBase();
				$reponse = $bdd->prepare('SELECT statut, banni, nbMauvaiseID, dateMauvaiseID, salt_prefixe, salt_suffixe, password FROM dil_comptes WHERE pseudo = :id ');
				$reponse->bindValue('id', $_POST['login'], PDO::PARAM_STR);
				$reponse->execute();
				
				if($donneesUtilisateur = $reponse->fetch() )	// si le nom est enregistre dans la base de donnée (identifiant unique)
				{	
					$reponse->closeCursor();
					$autorise=true;
					$reponseInterdit = $bdd->prepare('SELECT dateFin FROM dil_comptesinterdits WHERE pseudo = :id ');
					$reponseInterdit->bindValue('id', $_POST['login'], PDO::PARAM_STR);
					$reponseInterdit->execute();
					if($donneesInterdit = $reponseInterdit->fetch() )	// si le nom est enregistre dans la table des comptes désactivés
					{
						if($donneesInterdit['dateFin'] > time() )	// on vérifie la date
						{
							$autorise=false;
							$resultat_formulaires .= 'Plus de '.$maxBadID.' mauvais mots de passe dans la journ&eacute;e ont &eacute;t&eacute; entr&eacute;s sur votre compte  <br />
							Votre compte sera d&eacute;sactiv&eacute; pendant une dur&eacute;e de '.$tempsExclusion.' heures <br />';
						}
					}	
							// si le compte n'est pas blacklisté, on tente l'identification			
					if($autorise)
					{			// identification réussie
						if($donneesUtilisateur['password'] == sha1($donneesUtilisateur['salt_prefixe'].$_POST['mot_de_passe'].$donneesUtilisateur['salt_suffixe']) )
						{
						
							if($donneesUtilisateur['banni']==1)
								$resultat_formulaires="Votre compte a &eacute;t&eacute; banni <<br /> Adressez vous &agrave; un administrateur si vous souhaitez revenir";
							else
							{
								$_SESSION['statut']=$donneesUtilisateur['statut'];// on mémorise le nom de l'utilisateur dans un cookie pendant 10 jours
								setcookie('pseudo', $_POST['login'], time() + 240*3600, null, null, false, true); //ainsi il pourra se reconnecter plus facilement
								$_SESSION['nom']=$_POST['login'];	// on enregistre le nom dans la session
							}
						}
						
						else	// mauvais mot de passe entré
						{
							// si la première mauvaise identification remonte plus de 24h, on remet le compteur à zéro
							if($donneesUtilisateur['dateMauvaiseID'] < time() - 24*3600)	
								$bdd->exec('UPDATE dil_comptes SET dateMauvaiseID = '.time().', nbMauvaiseID = 1 WHERE pseudo = "'.$login.'"');
							
							// s'il y a eu trop de mauvaises identification, on rajoute le compte dans la base des interdits
							else if($donneesUtilisateur['nbMauvaiseID']>= $maxBadID)	
							{
								$bdd->exec('DELETE FROM dil_comptesinterdits WHERE pseudo = "'.$login.'"');	// s'il avait déjà été interdit auparavant, on le supprime
								$bdd->exec('INSERT dil_comptesinterdits (pseudo, finExclusion) VALUES ("'. $login. '", "'.(time()+$tempsExclusion*3600) .'")');	
							}
							
							else	// sinon on incrémente le nombre d'erreur
								$bdd->exec('UPDATE dil_comptes SET nbMauvaiseID = '. ($donneesUtilisateur['nbMauvaiseID']+1) .' WHERE pseudo = "'.$login.'"');
							
						}
					}
				}
				else
					$reponse->closeCursor();
			}
		}
		if($_SESSION['statut'] != "erreur")		// on affiche un message d'accueil pour la première connexion
			$resultat_formulaires .= "Bienvenue sur Dilemnia ! ";
		else								// si l'identification a échouée pour une raison ou une autre
			$resultat_formulaires .= "Erreur d'identification <br />	
		reloguez-vous !";
		
	}
	return $resultat_formulaires;
}
?>
